package errno

import "fmt"

//错误对象 ---
type Errno struct {
	Code    int
	Message string
}

//错误相应类型
type Err struct {
	Code    int
	Message string
	Err     error
}

//返回错误Errno类型的Message
func (err Errno) Error() string {
	return err.Message
}

//返回错误响应Err的详细信息
func (err *Err) Error() string {
	return fmt.Sprintf("[Err] code: %d, message: %s, error: %v", err.Code, err.Message, err.Err)
}

//解析错误类型 设置错误码 错误信息
func DecodeErr(err error) (int, string) {
	//无错误
	if err == nil {
		return OK.Code, OK.Message
	}

	switch typed := err.(type) {
	//自定义错误
	case *Err:
		return typed.Code, typed.Message
	case *Errno:
		return typed.Code, typed.Message
	default: //系统默认错误类型
		return InternalServerError.Code, err.Error()
	}
}
